package com.security.one_way_encry.sha;

import ch.qos.logback.core.encoder.ByteArrayUtil;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.SHA1Digest;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @ClassName TestShaBySha1
 * @Description Sha1 算法
 * @Detail      1、sha算法也是不可逆的，如sha-1、sha-256
 *               2、sha算法比MD5要安全一些
 *               3、相同的sha算法加密相同的字符串得到的结果是相同的
 *               4、sha算法也是可以被暴力破解
 * @Author MyPC
 * @Date 2020/9/23
 * @Version 1.0
 */
public class TestShaBySha1 {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        //aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
        System.out.println(encryptSha1("hello"));
        System.out.println(encryptSha1ByBC("hello"));
    }

    /**
     * 使用JDK的加密算法
     * @param key
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static String encryptSha1(String key) throws NoSuchAlgorithmException {
        MessageDigest instance = MessageDigest.getInstance("sha-1");
        instance.update(key.getBytes());
        byte[] digest = instance.digest();
        String string = ByteArrayUtil.toHexString(digest);
        return string;
    }


    /**
     * 使用 Bouncy Castle 的加密算法
     * @param key
     * @return
     */
    public static String encryptSha1ByBC(String key) {
        SHA1Digest sha1Digest = new SHA1Digest();
        sha1Digest.update(key.getBytes(),0,key.getBytes().length);
        byte[] bytes=new byte[sha1Digest.getDigestSize()];
        sha1Digest.doFinal(bytes,0);
        return org.bouncycastle.util.encoders.Hex.toHexString(bytes);
    }
}
